package com.linb.pan.server.modules.file.service;

import com.linb.pan.server.modules.file.context.*;
import com.linb.pan.server.modules.file.entity.BPanUserFile;
import com.baomidou.mybatisplus.extension.service.IService;
import com.linb.pan.server.modules.file.po.FolderTreeNodeVO;
import com.linb.pan.server.modules.file.vo.*;

import java.util.List;


public interface IUserFileService extends IService<BPanUserFile> {

    /**
     * 创建文件夹
     */
    Long createFolder(CreateFolderContext folderContext);

    /**
     * 查询用户根目录文件信息
     */
    BPanUserFile getUserRootFile(Long userId);

    /**
     * 查询用户的文件列表
     */
    List<BPanUserFileVO> getFileList(QueryFileListContext context);

    /**
     * 更新文件名称
     */
    void updateFilename(UpdateFilenameContext context);

    /**
     * 批量删除文件
     */
    void deleteFiles(DeleteFileContext context);

    /**
     * 文件秒传
     */
    boolean secUpload(SecUploadContext context);

    /**
     * 单文件上传
     */
    void upload(FileUploadContext context);

    /**
     * 文件分片上传
     */
    FileChunkUploadVO chunkUpload(FileChunkUploadContext context);

    /**
     * 查询用户已上传的文件分片列表
     */
    UploadedChunksVO getUploadedChunks(QueryUploadedChunksContext context);

    /**
     * 文件分片合并
     */
    void mergeFile(FileChunkMergeContext context);

    /**
     * 下载文件
     */
    void download(FileDownloadContext context);

    /**
     * 下载文件但不需要校验用户(不需要所属用户才能下载)
     */
    void downloadWithoutUser(FileDownloadContext context);

    /**
     * 文件预览
     */
    void preview(FilePreviewContext context);

    /**
     * 查询文件树
     */
    List<FolderTreeNodeVO> getFolderTree(FolderTreeNodeContext context);

    /**
     * 文件转移
     */
    void transfer(TransferFileContext context);

    /**
     * 复制文件或文件夹
     */
    void copy(CopyFileContext context);

    /**
     * 文件搜索
     */
    List<FileSearchResultVO> search(FileSearchContext context);

    /**
     * 查询面包屑
     */
    List<BreadcrumbVO> getBreadcrumbs(BreadcrumbContext context);

    /**
     * 递归查找子文件
     */
    List<BPanUserFile> findAllFileRecords(List<BPanUserFile> records);

    /**
     * 递归查找子文件，通过分享id列表
     */
    List<BPanUserFile> findAllFileRecordsByFileIdList(List<Long> fileIdList);

    /**
     * 将BPanUserFile集合转为BPanUserFileVO集合
     */
    List<BPanUserFileVO> transferVOList(List<BPanUserFile> records);
}
